package com.purchase.ml.utils;

import org.apache.commons.io.FileUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**
 * @author :zxm
 * @date :2021/2/27 16:35
 * @description :文件上传下载工具类
 **/
public class FileUploadAndDownUtil {
    // 指定时间格式
    private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    // 项目根路径下的目录  -- SpringBoot static 目录相当于是根路径下（SpringBoot 默认） static/upload/imgs
    public final static String IMG_PATH_PREFIX = "./static";

    /**
     * 生成文件夹名称
     * @return
     */
    public static String getDirNameByCurrentDate(){
        String dirName = sdf.format(new Date());
        return dirName;
    }

    /**
     * 生成文件名
     */
    public static String getNewNameByUUID(String oldName){
        String suffix = oldName.substring(oldName.lastIndexOf("."), oldName.length());
        String newName = UUID.randomUUID().toString().replace("-","").toUpperCase()+suffix;
        return newName;
    }

    /**
     * 	显示图片
     * @param uploadRootPath 保存文件的绝对根路径 例如：D:/upload/
     * @param filePath 上传文件到页面使用的相对路径 例如： /2021-2-27  /EB1EDA618AF745A3927ACE7D1EDE4622.jpg
     * @return
     */
    public static ResponseEntity<Object> showImage(String uploadRootPath, String filePath) {
        File file=new File(uploadRootPath, filePath);
        if(file.exists()) {
            //将下载的文件，封装byte[]
            byte[] bytes=null;
            try {
                bytes = FileUtils.readFileToByteArray(file);
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 创建封装响应头信息的对象
            HttpHeaders header=new HttpHeaders();
            // 封装响应内容类型(APPLICATION_OCTET_STREAM 响应的内容不限定)
            header.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            // 设置下载的文件的名称
            header.setContentDispositionFormData("attachment", "123.jpg");
            // 创建ResponseEntity对象
            ResponseEntity<Object> entity=new ResponseEntity<Object>(bytes, header, HttpStatus.CREATED);
            return entity;
        }else {
            return null;
        }
    }
    /**
     * 	删除用户原先上传的图片
     */
    public static void deleteFile(File file) {
//        File file = new File(uploadRootPath,imgpath);
        if(file.exists()) {
            file.delete();
        }
    }
    public static File getImgDirFile(){

        // 构建上传文件的存放 "文件夹" 路径
//        String fileDirPath = new String("src/main/resources/" + IMG_PATH_PREFIX);
        String fileDirPath = IMG_PATH_PREFIX;

        File fileDir = new File(fileDirPath);
        if(!fileDir.exists()){
            // 递归生成文件夹
            fileDir.mkdirs();
        }
        return fileDir;
    }
}
